package main

import (
	"io/ioutil"
	"log"
	"os"
	"runtime"
	"sync"
)

// 定义变量只会赋值一次
var once sync.Once
var pathDelimiter string

// Exists 判断所给路径文件/文件夹是否存在
func Exists(path string) bool {
	_, err := os.Stat(path) //os.Stat获取文件信息
	if err != nil {
		if os.IsExist(err) {
			return true
		}
		return false
	}
	return true
}

// IsDir 判断所给路径是否为文件夹
func IsDir(path string) bool {
	s, err := os.Stat(path)
	if err != nil {
		return false
	}
	return s.IsDir()
}

// IsFile 判断所给路径是否为文件
func IsFile(path string) bool {
	return !IsDir(path)
}

// getFiles 获取所有文件
func getFiles(folder string, fileList *[]string) {
	pathDelimiter := getPathDelimiter()
	files, _ := ioutil.ReadDir(folder)
	for _, file := range files {
		if file.IsDir() {
			getFiles(folder+pathDelimiter+file.Name(), fileList)
		} else {
			fileTmp := folder + pathDelimiter + file.Name()
			*fileList = append(*fileList, fileTmp)
		}
	}
}

// getPathDelimiter 获取当前的路径分割符号，使用单例只获取一次即可
func getPathDelimiter() string {
	once.Do(func() {
		// 判断当前执行环境是Win或者Linux处理路径
		ostype := runtime.GOOS
		if ostype == "windows" {
			pathDelimiter = "\\"
		} else if ostype == "linux" {
			pathDelimiter = "/"
		}
		log.Printf("当前工作环境：%s ; 目录分割符：%s", ostype, pathDelimiter)
	})
	return pathDelimiter
}

// 获取当前工作路径
func getCurrentPath() string {
	currentPath, _ := os.Getwd()
	//log.Printf("当前工作目录: %s", currentPath)
	return currentPath
}
